home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.07 Jul 90 / C++ micro-Draw ƒ / DisplList.cp next >
Encoding:
Text File  |  1990-05-21  |  2.5 KB  |  132 lines  |  [TEXT/MPS ]

  1. #include <Types.h>
  2. #include <QuickDraw.h>
  3. #include <Windows.h>
  4. #include <Events.h>
  5. #include <ToolUtils.h>
  6. #include <StdLib.h>
  7.  
  8. #include "DisplList.h"
  9.  
  10. TObjLink::TObjLink(TObjLink *n, TDisplObj *v)
  11. {
  12.     fNext = n; fmyObj = v;
  13. }
  14.  
  15. TObjList::TObjList(void)
  16. {
  17.     fHeader = nil; fNumObjs = 0;
  18. }
  19.  
  20. TObjList::~TObjList(void)
  21. {
  22.     TObjLink* temp;
  23.     while (fHeader != nil) 
  24.     {
  25.         temp = fHeader->GetNext();
  26.         delete fHeader->GetmyObj();
  27.         delete fHeader;
  28.         fHeader = temp;
  29.     }
  30.     fNumObjs = 0;
  31. }
  32.  
  33. void TObjList::AddObj(TDisplObj* obj)
  34. {
  35.     if (obj != nil)
  36.     {
  37.         TObjLink* temp;
  38.         temp = new TObjLink(fHeader,obj);
  39.         fHeader = temp;
  40.         fNumObjs++;
  41.     }
  42. }
  43.  
  44. TDisplObj* TObjList::FindObj(Point theLoc)
  45. {
  46.     TObjLink* temp;
  47.     Rect theRect;
  48.  
  49.     for (temp = fHeader; temp != nil; temp = temp->GetNext())
  50.         { theRect = temp->GetmyObj()->GetBoundRect();
  51.             if (PtInRect(theLoc,&theRect))
  52.                   return (temp->GetmyObj());
  53.         }
  54.     return nil;
  55. }
  56.  
  57. void TObjList::RemoveObj(TDisplObj* obj)
  58. {
  59.     if (obj != nil)
  60.     {
  61.         TObjLink* temp;
  62.         TObjLink* last;
  63.     
  64.         last = nil;
  65.         for (temp = fHeader; temp != nil; temp = temp->GetNext())
  66.           if (temp->GetmyObj() == obj)
  67.             {
  68.               if (last == nil) // if first item in list, just set first
  69.                 fHeader = temp->GetNext();
  70.               else last->SetNext(temp->GetNext());
  71.               delete temp;    // free the TObjLink
  72.               fNumObjs--;
  73.               return;
  74.             }
  75.           else last = temp;
  76.     }
  77. }
  78.  
  79. TDisplObj::TDisplObj(Rect r)  { fBoundRect = r; SetObjPat(qd.gray); }
  80.  
  81. void TDisplObj::SetObjPat(Pattern pat)  
  82. { for (int i=0; i<8; i++) fObjPat[i] = pat[i]; }
  83.  
  84. void TDisplObj::DragObj(Point *theLoc, Rect theRect)  
  85. {        
  86.     RgnHandle theRgn = NewRgn();
  87.     OpenRgn();
  88.         this->Draw(fObjPat);
  89.     CloseRgn(theRgn);
  90.     
  91.     long res = DragGrayRgn(theRgn,*theLoc,&theRect,&theRect,0,0);
  92.     if (LoWord(res) != 0x8000)
  93.     {    
  94.         theLoc->v += HiWord(res);
  95.         theLoc->h += LoWord(res);
  96.     }
  97.     
  98.     DisposeRgn(theRgn);
  99. }
  100.  
  101. TRoundRect::TRoundRect(Rect r) : (r) // Calls base class constructor
  102. {    fOvalWidth = 20;
  103.     fOvalHeight = 15;    }
  104.  
  105. void TRoundRect::Draw(Pattern pat)
  106. {    PenNormal();
  107.     FillRoundRect(&fBoundRect, fOvalWidth, fOvalHeight, pat);
  108.     FrameRoundRect(&fBoundRect, fOvalWidth, fOvalHeight);     }
  109.  
  110. void TRoundRect::Erase()
  111. {    EraseRoundRect(&fBoundRect, fOvalWidth, fOvalHeight);    }
  112.  
  113. TRect::TRect(Rect r) : (r) {}
  114.  
  115. void TRect::Draw(Pattern pat)
  116. {    PenNormal();
  117.     FillRect(&fBoundRect, pat);
  118.     FrameRect(&fBoundRect);     }
  119.  
  120. void TRect::Erase()
  121. {    EraseRect(&fBoundRect);        }
  122.  
  123. TOval::TOval(Rect r) : (r) {}
  124.  
  125. void TOval::Draw(Pattern pat)
  126. {    PenNormal();
  127.     FillOval(&fBoundRect, pat);
  128.     FrameOval(&fBoundRect);        }
  129.  
  130. void TOval::Erase()
  131. {    EraseOval(&fBoundRect);        }
  132.